#include "gtkstyle.h"
#include "gtkstylecontextprivate.h"
#include "gtkrender.h"
+#include "gtkrenderprivate.h"
/**
* SECTION:gtkiconfactory
}
static GdkPixbuf *
-render_icon_name_pixbuf (GtkIconSource *icon_source,
- GtkStyleContext *context,
- GtkIconSize size,
- gint scale)
+render_icon_name_pixbuf (GtkIconSource *icon_source,
+ GtkCssStyle *style,
+ GtkIconSize size,
+ gint scale)
{
GdkPixbuf *pixbuf;
GdkPixbuf *tmp_pixbuf;
- GtkIconSource tmp_source;
GtkIconTheme *icon_theme;
gint width, height, pixel_size;
gint *sizes, *s, dist;
GError *error = NULL;
icon_theme = gtk_css_icon_theme_value_get_icon_theme
- (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_ICON_THEME));
+ (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_THEME));
if (!gtk_icon_size_lookup (size, &width, &height))
{
return NULL;
}
- tmp_source = *icon_source;
- tmp_source.type = GTK_ICON_SOURCE_PIXBUF;
- tmp_source.source.pixbuf = tmp_pixbuf;
-
- pixbuf = gtk_render_icon_pixbuf (context, &tmp_source, -1);
+ pixbuf = gtk_render_icon_pixbuf_unpacked (tmp_pixbuf,
+ -1,
+ gtk_icon_source_get_state_wildcarded (icon_source)
+ ? _gtk_css_icon_effect_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT))
+ : GTK_CSS_ICON_EFFECT_NONE);
if (!pixbuf)
g_warning ("Failed to render icon");
static GdkPixbuf *
find_and_render_icon_source (GtkIconSet *icon_set,
- GtkStyleContext *context,
+ GtkCssStyle *style,
GtkTextDirection direction,
GtkStateType state,
GtkIconSize size,
break;
/* Fall through */
case GTK_ICON_SOURCE_PIXBUF:
- pixbuf = gtk_render_icon_pixbuf (context, source, size);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ pixbuf = gtk_render_icon_pixbuf_unpacked (gtk_icon_source_get_pixbuf (source),
+ gtk_icon_source_get_size_wildcarded (source) ? size : -1,
+ gtk_icon_source_get_state_wildcarded (source)
+ ? _gtk_css_icon_effect_value_get (
+ gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT))
+ : GTK_CSS_ICON_EFFECT_NONE);
+G_GNUC_END_IGNORE_DEPRECATIONS;
if (!pixbuf)
{
g_warning ("Failed to render icon");
break;
case GTK_ICON_SOURCE_ICON_NAME:
case GTK_ICON_SOURCE_STATIC_ICON_NAME:
- pixbuf = render_icon_name_pixbuf (source, context,
+ pixbuf = render_icon_name_pixbuf (source, style,
size, scale);
if (!pixbuf)
failed = g_slist_prepend (failed, source);
}
static GdkPixbuf*
-render_fallback_image (GtkStyleContext *context,
+render_fallback_image (GtkCssStyle *style,
GtkTextDirection direction,
GtkStateType state,
GtkIconSize size)
fallback_source.direction = GTK_TEXT_DIR_NONE;
}
- return render_icon_name_pixbuf (&fallback_source, context, size, 1);
+ return render_icon_name_pixbuf (&fallback_source, style, size, 1);
}
-static GdkPixbuf*
-gtk_icon_set_render_icon_pixbuf_for_scale (GtkIconSet *icon_set,
- GtkStyleContext *context,
- GtkIconSize size,
- gint scale)
+GdkPixbuf*
+gtk_icon_set_render_icon_pixbuf_for_scale (GtkIconSet *icon_set,
+ GtkCssStyle *style,
+ GtkTextDirection direction,
+ GtkIconSize size,
+ gint scale)
{
GdkPixbuf *icon = NULL;
GtkStateType state;
- GtkTextDirection direction;
GtkCssIconEffect effect;
g_return_val_if_fail (icon_set != NULL, NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
-
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- direction = gtk_style_context_get_direction (context);
-G_GNUC_END_IGNORE_DEPRECATIONS;
+ g_return_val_if_fail (GTK_IS_CSS_STYLE (style), NULL);
effect = _gtk_css_icon_effect_value_get
- (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_ICON_EFFECT));
+ (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT));
switch (effect)
{
}
if (icon_set->sources)
- icon = find_and_render_icon_source (icon_set, context, direction, state,
+ icon = find_and_render_icon_source (icon_set, style, direction, state,
size, scale);
if (icon == NULL)
- icon = render_fallback_image (context, direction, state, size);
+ icon = render_fallback_image (style, direction, state, size);
return icon;
}
g_return_val_if_fail (icon_set != NULL, NULL);
g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
- return gtk_icon_set_render_icon_pixbuf_for_scale (icon_set, context, size, 1);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ return gtk_icon_set_render_icon_pixbuf_for_scale (icon_set,
+ gtk_style_context_lookup_style (context),
+ gtk_style_context_get_direction (context),
+ size,
+ 1);
+G_GNUC_END_IGNORE_DEPRECATIONS;
}
/**
GdkPixbuf *pixbuf;
cairo_surface_t *surface;
- pixbuf = gtk_icon_set_render_icon_pixbuf_for_scale (icon_set, context, size, scale);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ pixbuf = gtk_icon_set_render_icon_pixbuf_for_scale (icon_set,
+ gtk_style_context_lookup_style (context),
+ gtk_style_context_get_direction (context),
+ size,
+ scale);
+G_GNUC_END_IGNORE_DEPRECATIONS;
surface = gdk_cairo_surface_create_from_pixbuf (pixbuf, scale, for_window);
g_object_unref (pixbuf);
}
if (!context)
- return render_fallback_image (context, direction, state, size);
+ return render_fallback_image (gtk_style_context_lookup_style (context), direction, state, size);
gtk_style_context_save (context);
#include "gtkiconthemeprivate.h"
#include "gtkrender.h"
#include "gtkstylecontextprivate.h"
+#include "deprecated/gtkiconfactoryprivate.h"
#include "deprecated/gtkstock.h"
struct _GtkIconHelperPrivate {
}
static cairo_surface_t *
-ensure_surface_for_icon_set (GtkIconHelper *self,
- GtkStyleContext *context,
- gint scale,
- GtkIconSet *icon_set)
+ensure_surface_for_icon_set (GtkIconHelper *self,
+ GtkCssStyle *style,
+ GtkTextDirection direction,
+ gint scale,
+ GtkIconSet *icon_set)
{
-G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- return gtk_icon_set_render_icon_surface (icon_set, context,
- self->priv->icon_size,
- scale,
- self->priv->window);
-G_GNUC_END_IGNORE_DEPRECATIONS;
+ cairo_surface_t *surface;
+ GdkPixbuf *pixbuf;
+
+ pixbuf = gtk_icon_set_render_icon_pixbuf_for_scale (icon_set,
+ style,
+ direction,
+ self->priv->icon_size,
+ scale);
+ surface = gdk_cairo_surface_create_from_pixbuf (pixbuf,
+ scale,
+ self->priv->window);
+ g_object_unref (pixbuf);
+
+ return surface;
}
static cairo_surface_t *
break;
case GTK_IMAGE_STOCK:
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
icon_set = gtk_icon_factory_lookup_default (gtk_image_definition_get_stock (self->priv->def));
if (icon_set != NULL)
- surface = ensure_surface_for_icon_set (self, context, scale, icon_set);
+ surface = ensure_surface_for_icon_set (self,
+ gtk_style_context_lookup_style (context),
+ gtk_style_context_get_direction (context),
+ scale, icon_set);
else
surface = NULL;
- G_GNUC_END_IGNORE_DEPRECATIONS;
+G_GNUC_END_IGNORE_DEPRECATIONS;
break;
case GTK_IMAGE_ICON_SET:
icon_set = gtk_image_definition_get_icon_set (self->priv->def);
- surface = ensure_surface_for_icon_set (self, context, scale, icon_set);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ surface = ensure_surface_for_icon_set (self,
+ gtk_style_context_lookup_style (context),
+ gtk_style_context_get_direction (context),
+ scale, icon_set);
+G_GNUC_END_IGNORE_DEPRECATIONS;
break;
case GTK_IMAGE_ICON_NAME:
#include <math.h>
#include "gtkcsscornervalueprivate.h"
-#include "gtkcssenumvalueprivate.h"
#include "gtkcssimagebuiltinprivate.h"
#include "gtkcssimagevalueprivate.h"
#include "gtkcssnumbervalueprivate.h"
GDK_INTERP_BILINEAR);
}
-static GdkPixbuf *
-gtk_render_icon_pixbuf_for_style (GtkCssStyle *style,
- const GtkIconSource *source,
- GtkIconSize size)
+GdkPixbuf *
+gtk_render_icon_pixbuf_unpacked (GdkPixbuf *base_pixbuf,
+ GtkIconSize size,
+ GtkCssIconEffect icon_effect)
{
GdkPixbuf *scaled;
GdkPixbuf *stated;
- GdkPixbuf *base_pixbuf;
- gint width = 1;
- gint height = 1;
cairo_surface_t *surface;
- gboolean wildcarded;
- GtkCssIconEffect icon_effect;
-
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- base_pixbuf = gtk_icon_source_get_pixbuf (source);
- G_GNUC_END_IGNORE_DEPRECATIONS;
g_return_val_if_fail (base_pixbuf != NULL, NULL);
- if (size != (GtkIconSize) -1 &&
- !gtk_icon_size_lookup (size, &width, &height))
- {
- g_warning (G_STRLOC ": invalid icon size '%d'", size);
- return NULL;
- }
-
/* If the size was wildcarded, and we're allowed to scale, then scale; otherwise,
* leave it alone.
*/
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- wildcarded = gtk_icon_source_get_size_wildcarded (source);
- G_GNUC_END_IGNORE_DEPRECATIONS;
- if (size != (GtkIconSize) -1 && wildcarded)
- scaled = scale_or_ref (base_pixbuf, width, height);
- else
- scaled = g_object_ref (base_pixbuf);
-
- /* If the state was wildcarded, then generate a state. */
- G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
- wildcarded = gtk_icon_source_get_state_wildcarded (source);
- G_GNUC_END_IGNORE_DEPRECATIONS;
+ if (size != (GtkIconSize) -1)
+ {
+ int width = 1;
+ int height = 1;
- if (!wildcarded)
- return scaled;
+ if (!gtk_icon_size_lookup (size, &width, &height))
+ {
+ g_warning (G_STRLOC ": invalid icon size '%d'", size);
+ return NULL;
+ }
- icon_effect = _gtk_css_icon_effect_value_get (gtk_css_style_get_value (style, GTK_CSS_PROPERTY_ICON_EFFECT));
+ scaled = scale_or_ref (base_pixbuf, width, height);
+ }
+ else
+ {
+ scaled = g_object_ref (base_pixbuf);
+ }
if (icon_effect != GTK_CSS_ICON_EFFECT_NONE)
{
g_return_val_if_fail (size > GTK_ICON_SIZE_INVALID || size == (GtkIconSize)-1, NULL);
g_return_val_if_fail (source != NULL, NULL);
- return gtk_render_icon_pixbuf_for_style (gtk_style_context_lookup_style (context), source, size);
+G_GNUC_BEGIN_IGNORE_DEPRECATIONS;
+ return gtk_render_icon_pixbuf_unpacked (gtk_icon_source_get_pixbuf (source),
+ gtk_icon_source_get_size_wildcarded (source) ? size : -1,
+ gtk_icon_source_get_state_wildcarded (source)
+ ? _gtk_css_icon_effect_value_get (
+ _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_ICON_EFFECT))
+ : GTK_CSS_ICON_EFFECT_NONE);
+G_GNUC_END_IGNORE_DEPRECATIONS;
}
/**